package com.xbongbong.pro.statistic.pojo;

import com.xbongbong.paas.toolbox.util.DateUtil;
import com.xbongbong.pro.enums.TimeTypeEnum;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.io.Serializable;

/**
 * 筛选时间，所传参数
 * （1）FiscalYearTimePojo fiscalYearTimePojo = JSON.parseObject(JSON.toJSONString(paramMap.get("paramJSON")), FiscalYearTimePojo.class) 或者
 * （2）FiscalYearTimePojo fiscalYearTimePojo = paramJSON.toJavaObject(FiscalYearTimePojo.class);//paramJSON是JSONObject
 * @author zcp
 * @date 2019/2/12 10:58
 * @since v1.0
 * @version v1.0
 */
@Getter
@Setter
@ToString
public class FiscalYearTimePojo implements Serializable {
    private static final long serialVersionUID = -2103670297709088928L;

    /**
     * 财年起始月份，要从配置表获取：companyConfigModel.getFiscalStartMonth(corpid)
     */
    private Integer startMonth;
    /**
     * 筛选时间类型---TimeTypeEnum枚举内存放
     */
    private Integer timeType;
    /**
     * fromType:点折线图内的某个数据时，如果大的时间范围是“年”，则图内单个数据展示的是“某月”；如果筛选的是“月/周”，则单个数据展示的是“某日”
     * 比如，筛选了3月的数据，然后点击了表格内3月8日的数据，则穿透时，timeType=1（代表日,结合month=3,day=8算具体时间）、fromType=3（筛选了月）
     */
    private Integer fromType;
    /**
     * 年份
     */
    private Integer year;
    /**
     * 选了第几季
     */
    private Integer season;
    /**
     * 月份
     */
    private Integer month;
    /**
     * 本周或上周的 第几天
     */
    private Integer weekIndex;
    /**
     * 几日
     */
    private Integer day;
    /**
     * string格式，获取自定义startTime--“2017-3-8”
     */
    private String startTime;
    /**
     * string格式，获取自定义endTime--“2017-3-9”
     */
    private String endTime;

    //--------以下参数通过计算求得
    /**
     * 筛选时间类型---与timeType对应
     */
    private TimeTypeEnum timeTypeEnum;

    public FiscalYearTimePojo() {
        //财年起始月份，默认为1月
        startMonth = 1;
        year = DateUtil.getYear4Someday(DateUtil.getInt());
        season = 0;
        month = 0;
        weekIndex = 0;
        day = 0;
        startTime="";
        endTime="";
    }

    /**
     * 获取timeType值，当其为空时置为默认类型（defaultTimeTypeEnum）
     * @param defaultTimeTypeEnum 默认时间类型枚举
     * @return java.lang.Integer
     * @author zcp
     * @date 2019/6/20 10:41
     * @since v1.0
     * @version v1.0
     */
    public Integer getTimeType4Default(TimeTypeEnum defaultTimeTypeEnum) {
        if (timeType == null || timeType == 0) {
            timeType = defaultTimeTypeEnum.getCode();
        }
        return timeType;
    }

    /**
     * 获取timeTypeEnum值，当其为空时置为默认类型（defaultTimeTypeEnum）
     * @param defaultTimeTypeEnum 默认时间类型枚举
     * @return java.lang.Integer
     * @author zcp
     * @date 2019/6/20 10:41
     * @since v1.0
     * @version v1.0
     */
    public TimeTypeEnum getTimeTypeEnum4Default(TimeTypeEnum defaultTimeTypeEnum) {
        if (timeTypeEnum == null) {
            timeTypeEnum = defaultTimeTypeEnum;
        }
        return timeTypeEnum;
    }

    /**
     * 获取timeType值，当其为空时置为默认为本月
     * @return java.lang.Integer
     * @author zcp
     * @date 2019/6/20 11:07
     * @since v1.0
     * @version v1.0
     */
    public Integer getTimeType4DefaultMonth() {
        return getTimeType4Default(TimeTypeEnum.MONTH);
    }

    /**
     * 获取timeType值，当其为空时置为默认为本日
     * @return java.lang.Integer
     * @author zcp
     * @date 2019/6/20 11:07
     * @since v1.0
     * @version v1.0
     */
    public Integer getTimeType4DefaultDay() {
        return getTimeType4Default(TimeTypeEnum.DAY);
    }

    /**
     * 获取timeType值，当其为空时置为默认为本日
     * @return java.lang.Integer
     * @author zcp
     * @date 2019/6/20 11:07
     * @since v1.0
     * @version v1.0
     */
    public Integer getTimeType4DefaultYear() {
        return getTimeType4Default(TimeTypeEnum.YEAR);
    }
    /**
     * 获取timeTypeEnum值，当其为空时置为默认为本月
     * @return com.xbongbong.pro.enums.TimeTypeEnum
     * @author zcp
     * @date 2019/6/20 11:07
     * @since v1.0
     * @version v1.0
     */
    public TimeTypeEnum getTimeTypeEnum4DefaultMonth() {
        Integer timeType = getTimeType4DefaultMonth();
        TimeTypeEnum timeTypeEnum = TimeTypeEnum.getByCode(timeType);
        return timeTypeEnum;
    }

    public Integer getYear() {
        if (year == null || year == 0) {
            // 本年
            year = DateUtil.getYear4Someday(DateUtil.getInt());
        }
        return year;
    }
    public Integer getSeason() {
        if (season == null) {
            season = 0;
        }
        return season;
    }
    public Integer getMonth() {
        if (month == null) {
            month = 0;
        }
        return month;
    }
    public Integer getWeekIndex() {
        if (weekIndex == null) {
            weekIndex = 0;
        }
        return weekIndex;
    }
    public Integer getDay() {
        if (day == null) {
            day = 0;
        }
        return day;
    }
}
